home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / maketbl.c < prev    next >
C/C++ Source or Header  |  1999-06-14  |  9KB  |  335 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define RGB(r,g,b) ((g)<<11|(r)<<6|(b)<<1)
  6.  
  7. #define BG_PALETS    64    /* BGで使用しているパレット数 */
  8.  
  9. #define SPEED_MAX    32
  10. double speed[SPEED_MAX] =
  11. {0.50, 0.60, 0.70, 0.80, 0.90,
  12.  1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90,
  13.  2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90,
  14.  3.00, 3.10, 3.20,
  15.  4.00, 5.00, 6.00, 7.00};
  16.  
  17.  
  18. signed int vxtable[SPEED_MAX][256], vytable[SPEED_MAX][256];
  19. unsigned char pstable[256][256];
  20. unsigned char rndtable[256];
  21.  
  22. const short pt_rot[256] =
  23. {
  24.     0, 0, 0, 0,
  25.     1, 1, 1, 1, 1, 1, 1, 1,
  26.     2, 2, 2, 2, 2, 2, 2, 2,
  27.     3, 3, 3, 3, 3, 3, 3, 3,
  28.     4, 4, 4, 4, 4, 4, 4, 4,
  29.     5, 5, 5, 5, 5, 5, 5, 5,
  30.     6, 6, 6, 6, 6, 6, 6, 6,
  31.     7, 7, 7, 7, 7, 7, 7, 7,
  32.     8, 8, 8, 8, 8, 8, 8, 8,
  33.     7, 7, 7, 7, 7, 7, 7, 7,
  34.     6, 6, 6, 6, 6, 6, 6, 6,
  35.     5, 5, 5, 5, 5, 5, 5, 5,
  36.     4, 4, 4, 4, 4, 4, 4, 4,
  37.     3, 3, 3, 3, 3, 3, 3, 3,
  38.     2, 2, 2, 2, 2, 2, 2, 2,
  39.     1, 1, 1, 1, 1, 1, 1, 1,
  40.     0, 0, 0, 0, 0, 0, 0, 0,
  41.     1, 1, 1, 1, 1, 1, 1, 1,
  42.     2, 2, 2, 2, 2, 2, 2, 2,
  43.     3, 3, 3, 3, 3, 3, 3, 3,
  44.     4, 4, 4, 4, 4, 4, 4, 4,
  45.     5, 5, 5, 5, 5, 5, 5, 5,
  46.     6, 6, 6, 6, 6, 6, 6, 6,
  47.     7, 7, 7, 7, 7, 7, 7, 7,
  48.     8, 8, 8, 8, 8, 8, 8, 8,
  49.     7, 7, 7, 7, 7, 7, 7, 7,
  50.     6, 6, 6, 6, 6, 6, 6, 6,
  51.     5, 5, 5, 5, 5, 5, 5, 5,
  52.     4, 4, 4, 4, 4, 4, 4, 4,
  53.     3, 3, 3, 3, 3, 3, 3, 3,
  54.     2, 2, 2, 2, 2, 2, 2, 2,
  55.     1, 1, 1, 1, 1, 1, 1, 1,
  56.     0, 0, 0, 0
  57. };
  58. const short info_rot[256] =
  59. {
  60.     0, 0, 0, 0,
  61.     0, 0, 0, 0, 0, 0, 0, 0,
  62.     0, 0, 0, 0, 0, 0, 0, 0,
  63.     0, 0, 0, 0, 0, 0, 0, 0,
  64.     0, 0, 0, 0, 0, 0, 0, 0,
  65.     0, 0, 0, 0, 0, 0, 0, 0,
  66.     0, 0, 0, 0, 0, 0, 0, 0,
  67.     0, 0, 0, 0, 0, 0, 0, 0,
  68.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  69.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  70.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  71.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  72.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  73.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  74.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  75.     0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
  76.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  77.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  78.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  79.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  80.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  81.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  82.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  83.     0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
  84.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  85.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  86.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  87.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  88.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  89.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  90.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  91.     0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
  92.     0, 0, 0, 0
  93. };
  94.  
  95.  
  96. const unsigned short blue[5][3] =
  97. {
  98.     {0, 0, 18},        /* R,G,B */
  99.     {0, 0, 28},
  100.     {15, 15, 31},
  101.     {20, 20, 31},
  102.     {31, 31, 31}
  103. };
  104.  
  105. const unsigned short red[5][3] =
  106. {
  107.     {18, 0, 0},        /* R,G,B */
  108.     {28, 0, 0},
  109.     {31, 15, 15},
  110.     {31, 20, 20},
  111.     {31, 31, 31}
  112. };
  113.  
  114. unsigned short blue_core[28][5];
  115. unsigned short red_core[28][5];
  116.  
  117.  
  118.  
  119. void usage (void)
  120. {
  121.     printf ("OTOKO.X 用テーブルを作成する maketbl.x ver1.00\n"
  122.         "        programmed by Mitsuky <FreeSoftware>\n"
  123.         "以下のテーブルを作成します\n"
  124.         "    TBL/PT_ROT.TBL   : スプライトパターン No.に足すオフセット値\n"
  125.         "    TBL/INFO_ROT.TBL : スプライト info に足すオフセット値\n"
  126.         "    TBL/VXTABLE.TBL     : cos テーブル\n"
  127.         "    TBL/VYTABLE.TBL     : sin テーブル\n"
  128.         "    TBL/PSTABLE.TBL     : 自機サーチテーブル\n"
  129.         "    TBL/RNDTABLE.TBL : 乱数テーブル\n"
  130.         "    TBL/BLUECORE.PAL : 青いコアのパレットテーブル\n"
  131.         "    TBL/REDCORE.PAL     : 赤いコアのパレットテーブル\n"
  132.         "    TBL/STAGE01G.PAL     : 1面背景のパレットをグラデーション化したもの\n"
  133.         "    TBL/STAGE02G.PAL     : 2面                    〃\n"
  134.         "角度関係のは全て1周=256段階で、右向きが0、下向きが64となっております\n"
  135.     );
  136. }
  137.  
  138.  
  139.  
  140. int maketable (void)
  141. {
  142.     int i, j, k;
  143.     FILE *fp;
  144.  
  145.     printf ("データテーブルを作成します。\n");
  146.  
  147.     fp = fopen ("TBL/PT_ROT.TBL", "wb");
  148.     fwrite (pt_rot, 256, sizeof (short), fp);
  149.     fclose (fp);
  150.  
  151.     fp = fopen ("TBL/INFO_ROT.TBL", "wb");
  152.     fwrite (info_rot, 256, sizeof (short), fp);
  153.     fclose (fp);
  154.  
  155.     for (i = 0; i < SPEED_MAX; i++) {
  156.         for (j = 0; j < 256; j++) {
  157.             vxtable[i][j] = (signed int) (cos (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  158.             vytable[i][j] = (signed int) (sin (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  159.         }
  160.     }
  161.     fp = fopen ("TBL/VXTABLE.TBL", "wb");
  162.     fwrite (vxtable, 256 * SPEED_MAX, sizeof (signed int), fp);
  163.     fclose (fp);
  164.     fp = fopen ("TBL/VYTABLE.TBL", "wb");
  165.     fwrite (vytable, 256 * SPEED_MAX, sizeof (signed int), fp);
  166.     fclose (fp);
  167.  
  168.     printf ("少々時間が掛かります。申し訳ありません。\n"
  169.         "( arctan を 256x256 個計算しています。)\n");
  170.     for (i = 0; i < 256; i++) {
  171.         printf ("%3d/256\x1b[0J\n\x0b", i + 1);
  172.         for (j = 0; j < 256; j++) {
  173.             pstable[i][j] = (unsigned char) (atan ((double) j / (double) i) * 256.0 / 2.0 / M_PI);
  174.         }
  175.     }
  176.     fp = fopen ("TBL/PSTABLE.TBL", "wb");
  177.     fwrite (pstable, 256 * 256, sizeof (unsigned char), fp);
  178.     fclose (fp);
  179.  
  180.     for (i = 0; i < 256; i++)
  181.         rndtable[i] = (unsigned char) ((rand ()/ 4) & 255);
  182.     fp = fopen ("TBL/RNDTABLE.TBL", "wb");
  183.     fwrite (rndtable, 256, sizeof (unsigned char), fp);
  184.     fclose (fp);
  185.  
  186.  
  187.     {
  188.         unsigned short *p = &blue_core[0][0];
  189.  
  190.         for (i = 0; i < 14; i++) {
  191.             for (j = 0; j < 5; j++) {
  192.                 unsigned short r, g, b;
  193.                 if (blue[j][0] > i)
  194.                     r = blue[j][0] - i;
  195.                 else
  196.                     r = 0;
  197.                 if (blue[j][1] > i)
  198.                     g = blue[j][1] - i;
  199.                 else
  200.                     g = 0;
  201.                 if (blue[j][2] > i)
  202.                     b = blue[j][2] - i;
  203.                 else
  204.                     b = 0;
  205.                 *p++ = ((g << 11) | (r << 6) | (b << 1)) & 0xfffe;
  206.             }
  207.         }
  208.         for (i = 14; i > 0; i--) {
  209.             for (j = 0; j < 5; j++) {
  210.                 unsigned short r, g, b;
  211.                 if (blue[j][0] > i)
  212.                     r = blue[j][0] - i;
  213.                 else
  214.                     r = 0;
  215.                 if (blue[j][1] > i)
  216.                     g = blue[j][1] - i;
  217.                 else
  218.                     g = 0;
  219.                 if (blue[j][2] > i)
  220.                     b = blue[j][2] - i;
  221.                 else
  222.                     b = 0;
  223.                 *p++ = ((g << 11) | (r << 6) | (b << 1)) & 0xfffe;
  224.             }
  225.         }
  226.     }
  227.     fp = fopen ("TBL/BLUECORE.PAL", "wb");
  228.     fwrite (blue_core, 5 * 28, sizeof (unsigned short), fp);
  229.     fclose (fp);
  230.  
  231.  
  232.     {
  233.         unsigned short *p = &red_core[0][0];
  234.  
  235.         for (i = 0; i < 14; i++) {
  236.             for (j = 0; j < 5; j++) {
  237.                 unsigned short r, g, b;
  238.                 if (red[j][0] > i)
  239.                     r = red[j][0] - i;
  240.                 else
  241.                     r = 0;
  242.                 if (red[j][1] > i)
  243.                     g = red[j][1] - i;
  244.                 else
  245.                     g = 0;
  246.                 if (red[j][2] > i)
  247.                     b = red[j][2] - i;
  248.                 else
  249.                     b = 0;
  250.                 *p++ = ((g << 11) | (r << 6) | (b << 1)) & 0xfffe;
  251.             }
  252.         }
  253.         for (i = 14; i > 0; i--) {
  254.             for (j = 0; j < 5; j++) {
  255.                 unsigned short r, g, b;
  256.                 if (red[j][0] > i)
  257.                     r = red[j][0] - i;
  258.                 else
  259.                     r = 0;
  260.                 if (red[j][1] > i)
  261.                     g = red[j][1] - i;
  262.                 else
  263.                     g = 0;
  264.                 if (red[j][2] > i)
  265.                     b = red[j][2] - i;
  266.                 else
  267.                     b = 0;
  268.                 *p++ = ((g << 11) | (r << 6) | (b << 1)) & 0xfffe;
  269.             }
  270.         }
  271.     }
  272.     fp = fopen ("TBL/REDCORE.PAL", "wb");
  273.     fwrite (red_core, 5 * 28, sizeof (unsigned short), fp);
  274.     fclose (fp);
  275.  
  276.  
  277.     for (k = 1; k <= 4; k++) {
  278.         unsigned short stage_palet_table[33][BG_PALETS];
  279.         char fname[256];
  280.  
  281.         {
  282.             short h1, h2;
  283.             for (h1 = 0; h1 < 33; h1++) {
  284.                 for (h2 = 0; h2 < BG_PALETS; h2++)
  285.                     stage_palet_table[h1][h2] = 0;
  286.             }
  287.         }
  288.         sprintf (fname, "BG/STAGE%02d.PAL", k);
  289.         fp = fopen (fname, "rb");
  290.         fread (stage_palet_table, BG_PALETS, sizeof (unsigned short), fp);
  291.         fclose (fp);
  292.  
  293.         for (i = 1; i < 33; i++) {
  294.             for (j = 0; j < BG_PALETS; j++) {
  295.                 int r, g, b;
  296.                 unsigned short r2, g2, b2;
  297.                 unsigned short c;
  298.  
  299.                 c = stage_palet_table[0][j];
  300.                 g = (c >> 11) & 0x1e;
  301.                 r = (c >> 6) & 0x1e;
  302.                 b = (c >> 1) & 0x1e;
  303.  
  304.                 g2 = (g * (32 - i) / 32) & 0x1e;
  305.                 r2 = (r * (32 - i) / 32) & 0x1e;
  306.                 b2 = (b * (32 - i) / 32) & 0x1e;
  307.  
  308.                 stage_palet_table[i][j] = (g2 << 11) | (r2 << 6) | (b2 << 1);
  309.             }
  310.         }
  311.         sprintf (fname, "BG/STAGE%02dG.PAL", k);
  312.         fp = fopen (fname, "wb");
  313.         fwrite (stage_palet_table, BG_PALETS * 33, sizeof (unsigned short), fp);
  314.         fclose (fp);
  315.     }
  316.  
  317.  
  318.     printf ("\n終了しました。\n");
  319.  
  320.     return (0);
  321. }
  322.  
  323.  
  324.  
  325. int main (int argc, char *argv[])
  326. {
  327.     if (argc != 1) {
  328.         usage ();
  329.         return (-1);
  330.     }
  331.     maketable ();
  332.  
  333.     return (0);
  334. }
  335.